package cn.tedu.csmall.stock.webapi.quartz;

import org.quartz.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;

// 当前类是在配置Spring容器中的调度器Scheduler
// 所有配置Spring内容的配置类,必须添加@Configuration注解
@Configuration
public class QuartzConfig {
    // 创建一个JobDetail(工作详情)对象,并将它保存到Spring容器中
    // 这个对象中要包含要运行的Job接口实现类的反射
    // @Bean注解会将其后的方法的返回值保存到Spring容器中
    @Bean
    public JobDetail showTime(){
        System.out.println("showTime方法运行");
        return JobBuilder.newJob(QuartzJob.class)
                // 给这个JobDetail定个名字
                .withIdentity("datetime")
                // 即使没有触发器绑定当前JobDetail也不会将它删除
                .storeDurably()
                .build();
    }

    // 下面要声明触发器对象,它设置job何时运行,也是保存到Spring容器中
    @Bean
    public Trigger showTimeTrigger(){
        System.out.println("showTimeTrigger方法运行");
        // 定义Cron表达式
        CronScheduleBuilder cronScheduleBuilder=CronScheduleBuilder.cronSchedule("0/10 * * * * ?");
        return TriggerBuilder.newTrigger()
                // 绑定要运行的jobDetail对象
                .forJob(showTime())
                // 绑定当前触发器名称
                .withIdentity("dateTrigger")
                // 绑定cron表达式
                .withSchedule(cronScheduleBuilder)
                .build();
    }

    @Bean
    public JobDetail addStock(){
        return JobBuilder.newJob(StockJob.class)
                .withIdentity("addStock")
                .storeDurably()
                .build();
    }

    //@Bean
    public Trigger addStockTrigger(){

        CronScheduleBuilder cron=
                CronScheduleBuilder.cronSchedule("0/10 * * * * ?");
        return TriggerBuilder.newTrigger()
                .forJob(addStock())
                .withIdentity("addTrigger")
                .withSchedule(cron)
                .build();

    }






}
